package com.xbongbong.paas.model;

import com.xbongbong.paas.domain.entity.PaasMenuEntity;
import com.xbongbong.paas.domain.entity.ext.PaasMenuEntityExt;
import com.xbongbong.paas.toolbox.exception.XbbException;

import java.util.List;
import java.util.Map;

/**
 * PAAS 菜单服务层
 *
 * @author wufeng
 * @time 2018-8-8 9:47
 */
public interface PaasMenuModel {

    /**
     * 插入实体
     *
     * @param entity 实体
     *
     * @return Integer MyBatis操作结果 1：成功
     */
    Integer insert(PaasMenuEntity entity);

    /**
     * 批量插入
     * @param list
     * @return
     */
    List<PaasMenuEntity> insertBatch(List<PaasMenuEntity> list);

    /**
     * 批量更新
     * @param list
     * @param corpid
     * @return
     */
    List<PaasMenuEntity> updateBatch(List<PaasMenuEntity> list, String corpid);

    /**
     *  查询菜单列表
     * @author wufeng
     * @date 2018/8/6 16:07
     * @param params
     * @descption
     * @return java.util.List<ApplicationListVO>
     */
    List<PaasMenuEntity> list(Map<String, Object> params);

    /**
     * 查询列表，返回值可以自己限定
     * @param params
     * @return
     */
    List<PaasMenuEntity> findEntitys(Map<String, Object> params);

    /**
     * 查询实体
     * @param key
     * @param corpid
     * @return
     */
    PaasMenuEntity getByKey(Long key, String corpid);
    /**
     *  查询菜单列表
     * @author wufeng
     * @date 2018/8/6 16:07
     * @param entity
     * @descption
     * @return Integer
     */
    Integer getEntitysCount(Map<String, Object> entity);

    /**
     * 删除实体
     * @author wufeng
     * @date 2018/8/6 17:18
     * @param key 菜单id
     * @param corpid 公司id
     * @descption
     * @return java.lang.Integer  mybatis操作结果，1：成功
     */
    Integer delete(Long key, String corpid);

    /**
     *  更新名字
     * @author wufeng
     * @date 2018/8/8 10:19
     * @param entity
     * @descption
     * @return java.lang.Integer
     */
    Integer update(PaasMenuEntity entity);

    /**
     * 菜单保存
     * @param entity
     * @author zcp
     * @since v1.0
     * @version v1.0
     */
    void save(PaasMenuEntity entity);

    /**
     * 排序
     * @author wufeng
     * @date 2018/8/8 10:10
     * @param  entity
     * @param corpid 公司id
     * @descption
     * @return
     */
    Integer updateSort(List<PaasMenuEntity> entity, String corpid);
    /**
     * 列表
     * @author wufeng
     * @date 2018/8/8 10:10
     * @param  entity
     * @descption
     * @return
     */
    List<PaasMenuEntityExt> getMenuList(Map<String, Object> entity);

    /**
     * 检索当前公司各个应用下的流程表单
     * @param entity
     * @return
     */
    List<PaasMenuEntityExt> getAppProcessFormList(Map<String, Object> entity);

    /**
     * 检索当前公司的各个引用的表单
     * @param entity
     * @return
     */
    List<PaasMenuEntityExt> getAppFormList(Map<String, Object> entity);

    /**
     * 检索当前应用的表单或者流程表单
     * @author wufeng
     * @param map
     * @return List<FormListVO>
     */
    List<PaasMenuEntityExt> formList(Map<String, Object> map);
    /**
     * 检索当前公司的某个应用下可用的流程表单
     * @param map
     * @return
     * @throws XbbException 可能出现业务异常
     */
    List<PaasMenuEntityExt> getSomeAppProcessFormList(Map<String,Object> map);

    /**
     * 根据应用id和业务标识获取实体
     * @param alias 业务标识
     * @param appId 应用id
     * @param corpid 公司id
     * @return 返回实体
     */
    PaasMenuEntity getByAlias(String alias, Long appId, String corpid);

    PaasMenuEntity getByAlias4Distributor(String alias, String corpid, Integer distributorMark);

    PaasMenuEntity getByAlias(String alias, String corpid);


    /**
     * 获取菜单list
     * @param corpid
     * @return java.util.List<com.xbongbong.paas.domain.entity.PaasMenuEntity>
     * @author zcp
     * @date 2019/7/11 23:24
     * @since v1.0
     * @version v1.0
     */
    List<PaasMenuEntity> getList(String corpid);

    /**
     * 构建菜单id和菜单名称的对应关系map
     * @param corpid
     * @return java.util.Map<java.lang.String,java.lang.String>
     * @author zcp
     * @date 2019/7/11 23:25
     * @since v1.0
     * @version v1.0
     */
    Map<String, String> getIdNameMap(String corpid);

    /**
     * 慎用！！！如果分库后则强制不能使用该方法！！！
     * 因为，该方法没有限制corpid（专门给资金管理改造一期使用：批量更新线上的一些已有菜单，如原回款管理改为应收款、原发票管理改为销项发票等）
     * 批量更新菜单：parentId、name、type（应收款与回款单分隔开，计划本身无流程）、updateTime
     * @param list 要更新的菜单list
     * @return java.lang.Integer
     * @author zcp
     * @date 19/11/4 004 19:41
     * @update 19/11/4 004 19:41
     * @since v1.0
     * @version v1.0
     */
    Integer updateBatchTemp(List<PaasMenuEntity> list) throws XbbException;

    /**
     * 批量更新del
     * @param del
     * @param updateTime
     * @param idIn
     * @param corpid
     */
    void batchUpdateDel(Integer del, Integer updateTime,List<Long> idIn, String corpid);

    Integer deleteBatch(List<Long> idIn, String corpid);

    Integer maxSortInSubMenu(String corpid, Long parentId, Integer del);

    Integer deleteByAlias(List<String> aliasList, String corpid);


    Map<Integer, String> getMenuNameByAlias(List<String> aliasIn, String corpid, Integer businessType);

    boolean enableMenu(String corpid, String alias) throws XbbException;
}
